Univerzalni zaokrouhlovaci funkce - reseni
Otázka od: Karel Pecinka
4. 8. 2004 11:07
Zdravim,
rozsiril jsem funkci Jirky Virta o moznost zaokrouhlovat ruznymi smery a
taky napr. na padesatniky. Kdyby se to nekomu hodilo, prikladam nize.
Karel
function RoundXDec(const Cislo: Extended; Smer: Byte; DesMist: integer):
Extended;
{
Vyznam parametru:
Smer = 0 - zaokrouhleni podle pravidel
1 - zaokrouhleni dolu
2 - zaokrouhleni nahoru
5 - zaokrouhlovana cifra ma na konci bud 0 nebo 5
DesMist = 0 - na cela cisla
1 - na desetiny
2 - na setiny
-1 - na desitky
-2 - na stovky
atd.
}
var
x, y: Extended;
begin
if Smer = 5 then dec(DesMist); // zaokrouhleni na 5 nemuze
pouzit trunc
x := Cislo * IntPower(10, DesMist);
case Smer of
1: x := trunc(x); // zaokrouhledni dolu
2: x := trunc(x + 0.99999); // zaokrouhledni nahoru
5: begin // zaokrouhleni na padesatniky
y := Frac(x); // vezme cast za des. carkou
x := trunc(x);
if (y < 0.25) then y := 0 else
if (y >= 0.25) and (y < 0.75) then y := 0.5 else
y := 1;
x := x + y;
end;
else
x := Round(x); // zaokrouhledni podle pravidel
end;
Result := x / IntPower(10, DesMist);
end;
S pozdravem
Ing. Karel Pecinka
Sofico-CZ, v. o. s.
U Vodarny 5
568 02 Svitavy
tel: +420 608 110 949
email: k.pecinka@ordis.cz
WWW: http://www.ordis.cz